<?php

namespace IYUU\sdk\CoolQ\Domain;

use IYUU\sdk\CoolQ\Context;
use IYUU\sdk\CoolQ\Domain\Message as DomainMessage;
use IYUU\sdk\CoolQ\Domain\User as DomainUser;
use IYUU\sdk\CoolQ\Event\Message as EventMessage;
use function IYUU\sdk\CoolQ\getOneBot;
use function IYUU\sdk\CoolQ\showTable;

/**
 * 管理员私聊消息处理器
 * Class MessagePrivateMaster
 * @package IYUU\sdk\CoolQ\Domain
 */
class MessagePrivateMaster
{
    /**
     * 应答方法
     * @param Context $context
     * @param EventMessage $msgObj
     * @return array
     */
    public static function respond(Context $context, EventMessage $msgObj): array
    {
        // 调试日志：私聊消息
        //file_put_contents(runtime_path() . '/privateMessage.log', __METHOD__ . PP($this->message, false), FILE_APPEND);
        $message = $context->get('message', '');
        /**
         * 群管菜单
         */
        if ($message === 'menu') {
            $resp = ['私：清空消息表', '私：重置字节码', '私群：status', '私群：version', '群：syncUserTable'];
            return EventMessage::reply(showTable($resp) . PHP_EOL . date('Y-m-d H:i:s'));
        }

        /**
         * 功能：输出框架运行状态
         * 触发方法：$message等于status
         */
        if ($message === 'status') {
            $cq = getOneBot();
            $status = $cq->getStatusText();
            return EventMessage::reply($status);
        }

        /**
         * 功能：输出版本信息（框架版本、接口版本、系统版本）
         * 触发方法：$message等于version
         */
        if ($message === 'version') {
            $cq = getOneBot();
            $status = $cq->getVersionInfoText();
            return EventMessage::reply($status);
        }

        /**
         * 功能：查询表情的CQ码
         */
        if (preg_match('#^\[CQ:face,id=(\d+)\]$#', $message, $matches)) {
            return EventMessage::reply($message, true);
        }

        /**
         * 功能：清空消息数据表 {cq_message}
         */
        if ($message === '清空消息表') {
            // 1. 清空消息数据表
            $resp = DomainMessage::clear();
            return $resp ? EventMessage::reply($resp) : [];
        }

        /**
         * 重置字节码缓存的内容
         */
        if ($message === '重置字节码') {
            function_exists('opcache_reset') and opcache_reset();
            $resp = '函数：opcache_reset，执行成功';
            return EventMessage::reply($resp);
        }

        /**
         * 功能：读取群成员列表，插入数据库（用户表、群成员关系表）
         * - 私聊初始化（主人不在群内时，用此命令同步）
         */
        if (preg_match('#^syncUserTable(?P<id>\d+)$#iU', $message, $matches)) {
            // 异步耗时任务
            if (function_exists('fastcgi_finish_request')) {
                echo json_encode(EventMessage::reply($matches['id']));
                fastcgi_finish_request();
                // 初始化群用户 2021年8月7日
                $rs = DomainUser::syncUserTable((int)$matches['id']);
                $msgObj->sendBack(json_encode($rs));
            }
        }

        return [];
    }
}
